﻿using Biz;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace App
{
    public partial class FrmQLDanhMuc : Form
    {
        [DllImport("user32")]
        private static extern int GetSystemMenu(IntPtr hWnd, bool bRevert);
        [DllImport("user32")]
        private static extern bool DeleteMenu(int hMenu, int uPosition, int uFlags);

        // private DatabaseContext db = new DatabaseContext("WebstoreDbConnectionString");
        private Category cat;
        private Property prop;
        public FrmQLDanhMuc()
        {
            InitializeComponent();
        }

        private void FrmDanhMuc_Load(object sender, EventArgs e)
        {
            int s_SystemMenuHandle = GetSystemMenu(this.Handle, false);
            DeleteMenu(s_SystemMenuHandle, 6, 1024);

            ReloadInformations();
        }

        private void ReloadInformations()
        {
            lstDanhMuc.Items.Clear();
            cat = new Category();
            foreach (var c in cat.GetAll())
            {
                lstDanhMuc.Items.Add(c);
            }
            //lstDanhMuc.Items.Clear();
            //foreach (var c in db.Categories.ToList())
            //{
            //    lstDanhMuc.Items.Add(c);
            //}
            txtTenDanhMuc.Tag = null;

            //lstThuocTinh.Items.Clear();
            txtTenThuocTinh.Tag = null;
        }

        private void lstDanhMuc_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                ListBox lst = sender as ListBox;
                if (lst.Items.Count == 0) return;

                Category currentItem = (Category)lst.Items[lst.SelectedIndex];
                txtTenDanhMuc.Text = currentItem.Name;
                lstThuocTinh.Items.Clear();
                foreach (var p in currentItem.Properties)
                {
                    lstThuocTinh.Items.Add(p);
                }
            }
            catch
            {
                return;
            }
        }

        private void lstThuocTinh_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListBox lst = sender as ListBox;
            if (lst.Items.Count == 0) return;

            Property currentItem = (Property)lst.Items[lst.SelectedIndex];
            txtTenThuocTinh.Text = currentItem.Name;
        }

        private void btnThemDanhMuc_Click(object sender, EventArgs e)
        {
            txtTenDanhMuc.Text = "";
            txtTenDanhMuc.Focus();
            txtTenDanhMuc.Tag = "add|" + lstDanhMuc.SelectedIndex;
        }

        private void btnThucHienDanhMuc_Click(object sender, EventArgs e)
        {
            if (txtTenDanhMuc.Tag == null)
            {
                MessageBox.Show(this, "Chưa chọn thao tác!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string[] strs = ((string)txtTenDanhMuc.Tag).Split('|');
            if (strs.Count() == 0)
            {
                MessageBox.Show(this, "Chưa chọn thao tác!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if (strs[0].Equals("add"))
                {
                    cat = new Category();
                    cat.Name = txtTenDanhMuc.Text;
                    if (cat.Insert()==1)
                    {
                        MessageBox.Show(this, "Đã thêm một danh mục", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (strs[0].Equals("edit"))
                {
                    cat = lstDanhMuc.Items[int.Parse(strs[1])] as Category;
                    cat.Name = txtTenDanhMuc.Text;
                    if (cat.Update() == 1)
                    {
                        MessageBox.Show(this, "Đã sửa thành công danh mục", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                ReloadInformations();
                txtTenDanhMuc.Text = "";
            }
        }

        private void btnSuaDanhMuc_Click(object sender, EventArgs e)
        {
            if (lstDanhMuc.SelectedIndex == -1)
            {
                MessageBox.Show(this, "Chưa chọn danh mục!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);   
            }
            txtTenDanhMuc.Text = "";
            txtTenDanhMuc.Focus();
            txtTenDanhMuc.Tag = "edit|" + lstDanhMuc.SelectedIndex;
        }

        private void btnThemThuocTinh_Click(object sender, EventArgs e)
        {
            if (lstDanhMuc.SelectedIndex == -1)
            {
                MessageBox.Show(this, "Chưa chọn danh mục!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            txtTenThuocTinh.Text = "";
            txtTenThuocTinh.Focus();
            txtTenThuocTinh.Tag = "add|" + lstThuocTinh.SelectedIndex;
        }

        private void btnSuaThuocTinh_Click(object sender, EventArgs e)
        {
            if (lstDanhMuc.SelectedIndex == -1)
            {
                MessageBox.Show(this, "Chưa chọn danh mục!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            txtTenThuocTinh.Text = "";
            txtTenThuocTinh.Focus();
            txtTenThuocTinh.Tag = "edit|" + lstThuocTinh.SelectedIndex;    
        }

        private void btnThucHienThuocTinh_Click(object sender, EventArgs e)
        {
            if (txtTenThuocTinh.Tag == null)
            {
                MessageBox.Show(this, "Chưa chọn thao tác!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string[] strs = ((string)txtTenThuocTinh.Tag).Split('|');
            if (strs.Count() == 0)
            {
                MessageBox.Show(this, "Chưa chọn thao tác!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if (strs[0].Equals("add"))
                {
                    cat = lstDanhMuc.Items[lstDanhMuc.SelectedIndex] as Category;
                    prop = new Property();
                    prop.Name = txtTenThuocTinh.Text;
                    prop.Category = cat;
                    prop.Insert();
                    MessageBox.Show(this, "Đã thêm một thuộc tính", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //ReloadInformations();
                }

                if (strs[0].Equals("edit"))
                {
                    cat = lstDanhMuc.Items[lstDanhMuc.SelectedIndex] as Category;
                    prop = lstThuocTinh.Items[int.Parse(strs[1])] as Property;
                    prop.Name = txtTenThuocTinh.Text;
                    //prop.Category = cat;
                    prop.Update();
                    MessageBox.Show(this, "Đã sửa thuộc tính thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //ReloadInformations();
                }
                txtTenThuocTinh.Text = "";
                //test
                lstThuocTinh.Items.Clear();
                foreach (var p in cat.Properties)
                {
                    lstThuocTinh.Items.Add(p);
                }
            }
        }

        private void btnXoaDanhMuc_Click(object sender, EventArgs e)
        {
            if (lstDanhMuc.SelectedIndex == -1)
            {
                MessageBox.Show(this, "Chưa chọn danh mục!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            try
            {
                cat = lstDanhMuc.Items[lstDanhMuc.SelectedIndex] as Category;
                cat.Delete();
                ReloadInformations();
            }
            catch
            {
                MessageBox.Show(this, "Không thể xóa danh mục này!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnXoaThuocTinh_Click(object sender, EventArgs e)
        {
            if (lstThuocTinh.SelectedIndex == -1)
            {
                MessageBox.Show(this, "Chưa chọn thuộc tính!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            try
            {
                prop = lstThuocTinh.Items[lstThuocTinh.SelectedIndex] as Property;
                prop.Delete();
                cat = lstDanhMuc.Items[lstDanhMuc.SelectedIndex] as Category;
                lstThuocTinh.Items.Clear();
                foreach (var p in cat.Properties)
                {
                    lstThuocTinh.Items.Add(p);
                }

            }
            catch
            {
                MessageBox.Show(this, "Không thể xóa thuộc tính này!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
